/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import exception.AccessErrorException;
import exception.ConnectionBugException;
import exception.NoDataException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Locale;
import modele.ModeleYams;
import modele.ModeleYamsInterface;
import modele.PalmaresBDD;
import modele.TableModelPalmares;
import vue.VueAccueil;
import vue.VuePalmares;
import vue.VueSaisirJoueur;

/**
 * Classe ControllerAcceuil qui contrôle la vue VueAccueil
 * @author Florian MININ & Khémon BEH
 */
public class ControllerAccueil implements ActionListener, WindowListener{

    private VueAccueil vue;
    private ModeleYamsInterface modele;
    private PalmaresBDD palmares;

    public ControllerAccueil(VueAccueil _vue, ModeleYamsInterface _modele) {
        vue = _vue;
        modele = _modele;
        palmares = new PalmaresBDD();
        try {
            palmares.initialiser();
        } catch (NoDataException ex) {
            //Si la table est vide, il n'y a pas de palmarès mais pas 
           //d'erreur à afficher
        } catch (AccessErrorException ex) {
            //Affichage de l'erreur
            vue.afficheErreurDonnees();
        }
    }

    /**
     * Méthode actionPerformed
     * @param e ActionEvent 
     */
    public void actionPerformed(ActionEvent e) {
        String ac = e.getActionCommand();
        if (ac.equals(VueAccueil.BTN_FR)) {
            vue.setLangueAccueil(Locale.FRANCE);
        } else if (ac.equals(VueAccueil.BTN_EN)) {
            vue.setLangueAccueil(Locale.UK);
        } else if (ac.equals(VueAccueil.BTN_PALMARES)) {
            TableModelPalmares modelePalmares = new TableModelPalmares(palmares.getListEnregistrement());
            VuePalmares vuePalmares = new VuePalmares(vue.getLocale(), modelePalmares);
            vuePalmares.setVisible(true);

        } //Sinon c'est le 1 vs 1 ou 1 vs CPU
        else {
            VueSaisirJoueur vueSaisirJoueur = new VueSaisirJoueur(vue.getLocale());
            if (ac.equals(VueAccueil.BTN_1VSCPU)) {
                vueSaisirJoueur.modeJouerVsCPU();
            }
            ControllerSaisirJoueur ctrlSaisirJoueur = new ControllerSaisirJoueur(vueSaisirJoueur, modele);
            vueSaisirJoueur.abonneComposants(ctrlSaisirJoueur);
            vue.dispose();
            vueSaisirJoueur.setVisible(true);

        }
    }

    public void windowOpened(WindowEvent e) {
    }

    public void windowClosing(WindowEvent e) {
        try {
            palmares.deconnecter();
        } catch (ConnectionBugException ex) {
            System.err.println("Erreur de déconnexion");
        }
    }

    public void windowClosed(WindowEvent e) {
    }

    public void windowIconified(WindowEvent e) {
    }

    public void windowDeiconified(WindowEvent e) {
    }

    public void windowActivated(WindowEvent e) {
    }

    public void windowDeactivated(WindowEvent e) {
    }
}
